package com.xzk.service;

import com.xzk.bean.Express;
import com.xzk.exception.DuplicateNumberException;

import java.util.List;
import java.util.Map;

/**
 * @ClassName ExpressService
 * @Description 快递Service层接口
 * @Author 0715-YuHao
 * @Date 2020/10/6 12:30
 * @Version 1.0
 */
public interface ExpressService {
    /**
     * @Author 0715-YuHao
     * @Description 用于查询数据库中的全部快递（总数+新增），待取件快递（总数+新增）
     * @Date 22:07 2020/9/10
     * @Param []
     * @return [{size:总数,day:新增},{size:总数,day:新增}]
     **/
    Map<String, Integer> console();

    /**
     * @Author 0715-YuHao
     * @Description 用于查询所有快递
     * @Date 22:08 2020/9/10
     * @return 快递的集合
     **/
    List<Express> findAll();

    /**
     * @Author 0715-YuHao
     * @Description 根据快递单号，查询快递信息
     * @Date 22:09 2020/9/10
     * @Param [number] [单号]
     * @return 查询的快递信息，单号不存在时返回null
     **/
    Express findByNumber(String number);

    /**
     * @Author 0715-YuHao
     * @Description
     * @Date 22:09 2020/9/10
     * @Param [code] [取件码]
     * @return 根据快递取件码，查询快递信息
     **/
    Express findByCode(String code);

    /**
     * @Author 0715-YuHao
     * @Description 根据用户手机号码，查询他所有的快递信息
     * @Date 15:45 2020/9/11
     * @Param [userPhone] 手机号码
     * @return 查询的快递信息列表
     **/
    List<Express> findByUserPhone(String userPhone);

    /**
     * @Author 0715-YuHao
     * @Description 根据用户手机号码与状态，查询他所有的快递信息
     * @Date 15:45 2020/9/11
     * @Param [userPhone] 手机号码
     * @Param [status] 快递状态
     * @return 查询的快递信息列表
     **/
    List<Express> findByUserPhoneAndStatus(String userPhone, int status);

    /**
     * 根据录入人手机号码，查询录入的所有记录
     * @param sysPhone 手机号码
     * @return 查询的快递信息列表
     */
    List<Express> findBySysPhone(String sysPhone);

    /**
     * 快递的录入
     * @param e 要录入的快递对象
     * @return 录入的结果，true表示成功，false表示失败
     */
    boolean insert(Express e) throws DuplicateNumberException;

    /**
     * 快递的修改
     * @param id 要修改的快递id
     * @param newExpress 新的快递对象（number，company,username,userPhone）
     * @return 修改的结果，true表示成功，false表示失败
     */
    boolean update(int id,Express newExpress) throws DuplicateNumberException;

    /**
     * 更改快递的状态为1，表示取件完成
     * @param code 要修改的快递取件码
     * @return 修改的结果，true表示成功，false表示失败
     */
    boolean updateStatus(String code);

    /**
     * 根据id，删除单个快递信息
     * @param id 要删除的快递id
     * @return 删除的结果，true表示成功，false表示失败
     */
    boolean delete(int id);
}
